﻿using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;
using System.Text;
namespace HGZP.PLL
{
    /// <summary>
    /// 作用：文件操作类
    /// 作者：许金杰
    /// 时间：2011.7.2
    /// </summary>
    public class fileoperate
    {
        /// <summary>
        /// 检验文件是否存在
        /// </summary>
        /// <param name="filepath">文件完整目录</param>
        /// <returns>是否存在</returns>
        public static bool ifnull(string filepath)
        {
            return System.IO.File.Exists(filepath);
        }
        /// <summary>
        /// 获取文件名（若文件不存在则返回unll）
        /// </summary>
        /// <param name="filepath">文件完整目录</param>
        /// <returns>文件名</returns>
        public static string filename(string filepath)
        {
            System.IO.FileInfo objFI = new System.IO.FileInfo(filepath);
            if (ifnull(filepath))
            {
                return objFI.Name;
            }
            else
            {
                return null;
            }
        }
        /// <summary>
        /// 获取文件扩展名（例如：.exe）（若文件不存在则返回unll）
        /// </summary>
        /// <param name="filepath">文件完整目录</param>
        /// <returns>文件扩展名</returns>
        public static string fileextension(string filepath)
        {
            System.IO.FileInfo objFI = new System.IO.FileInfo(filepath);
            if (ifnull(filepath))
            {
                return objFI.Extension;
            }
            else
            {
                return null;
            }
        }
        /// <summary>
        /// 获取文件大小（字节）（若文件不存在则返回unll）
        /// </summary>
        /// <param name="filepath">文件完整目录</param>
        /// <returns>文件大小</returns>
        public static long filelength(string filepath)
        {
            System.IO.FileInfo objFI = new System.IO.FileInfo(filepath);
            if (ifnull(filepath))
            {
                return objFI.Length;
            }
            else
            {
                return 0;
            }
        }
        /// <summary>
        /// 获取文件所在目录（若文件不存在则返回unll）
        /// </summary>
        /// <param name="filepath">文件完整目录</param>
        /// <returns>文件所在目录</returns>
        public static string filedirectoryname(string filepath)
        {
            System.IO.FileInfo objFI = new System.IO.FileInfo(filepath);
            if (ifnull(filepath))
            {
                return objFI.DirectoryName;
            }
            else
            {
                return null;
            }
        }
        /// <summary>
        /// 永久删除文件（若文件不存在则返回unll）
        /// </summary>
        /// <param name="filepath">文件完整目录</param>
        public static void filedelete(string filepath)
        {
            System.IO.FileInfo objFI = new System.IO.FileInfo(filepath);
            if (ifnull(filepath))
            {
                objFI.Delete();
            }
        }
        /// <summary>
        /// 重命名的方式复制文件到指定文件夹下面（若文件不存在则返回unll）
        /// </summary>
        /// <param name="newfilepath">新文件的完整路径</param>
        public static void filecopyto(string filepath, string newfilepath)
        {
            System.IO.FileInfo objFI = new System.IO.FileInfo(filepath);
            if (ifnull(filepath))
            {
                objFI.CopyTo(newfilepath, false);
            }
        }
        /// <summary>
        /// 以重命名的方式移动文件（若文件不存在则返回unll）
        /// </summary>
        /// <param name="newfilepath">新文件的完整路径</param>
        public static void filemoveto(string filepath, string newfilepath)
        {
            System.IO.FileInfo objFI = new System.IO.FileInfo(filepath);
            if (ifnull(filepath))
            {
                objFI.MoveTo(newfilepath);
            }
        }
        /// <summary>
        /// 在指定文件夹下创建新文件夹
        /// </summary>
        /// <param name="newdirectory">指定的文件夹</param>
        /// <param name="name">新文件夹名字</param>
        public static void filecreatdirectory(string newdirectory, string name)
        {
            Directory.CreateDirectory(newdirectory + "/" + name);
        }

        /// <summary>
        /// 递归删除文件夹及其文件夹下的所有文件
        /// </summary>
        /// <param name="dir">新文件的完整路径</param>
        /// <returns></returns>
        public static bool DeleteFolder(string filepath)
        {
            try
            {
                if (Directory.Exists(filepath)) //如果存在这个文件夹删除之 
                {
                    foreach (string d in Directory.GetFileSystemEntries(filepath))
                    {
                        if (File.Exists(d))
                            File.Delete(d); //直接删除其中的文件 
                        else
                            DeleteFolder(d); //递归删除子文件夹 
                    }
                    Directory.Delete(filepath); //删除已空文件夹 
                }
                return true;
            }
            catch (Exception ex)
            {
                return false;
            }

        }
        /// <summary>
        /// 指定文件夹下面的所有内容copy到目标文件夹下面
        /// </summary>
        /// <param name="srcPath">原始文件夹</param>
        /// <param name="aimPath">目标文件夹</param>
        public static void CopyDir(string srcPath, string aimPath)
        {
            try
            {
                // 检查目标目录是否以目录分割字符结束如果不是则添加之
                if (aimPath[aimPath.Length - 1] != Path.DirectorySeparatorChar)
                    aimPath += Path.DirectorySeparatorChar;
                // 判断目标目录是否存在如果不存在则新建之
                if (!Directory.Exists(aimPath))
                    Directory.CreateDirectory(aimPath);
                // 得到源目录的文件列表，该里面是包含文件以及目录路径的一个数组
                //如果你指向copy目标文件下面的文件而不包含目录请使用下面的方法
                //string[] fileList = Directory.GetFiles(srcPath);
                string[] fileList = Directory.GetFileSystemEntries(srcPath);
                //遍历所有的文件和目录
                foreach (string file in fileList)
                {
                    //先当作目录处理如果存在这个目录就递归Copy该目录下面的文件
                    if (Directory.Exists(file))
                        CopyDir(file, aimPath + Path.GetFileName(file));
                    //否则直接Copy文件
                    else
                        File.Copy(file, aimPath + Path.GetFileName(file), true);
                }
            }
            catch (Exception ee)
            {
                throw new Exception(ee.ToString());
            }
        }
        /// <summary>
        /// 获取指定文件夹下面的文件名称
        /// </summary>
        /// <param name="path">文件夹路径</param>
        /// <returns>返回文件名组成的数组</returns>
        public static string[] filenodes(string path)
        {
            string[] dirs = Directory.GetFiles(path);
            for (int i = 0; i < dirs.Length; i++)
            {
                dirs[i] = Path.GetFileName(dirs[i]);
            }
            return dirs;
        }
        /// <summary>
        /// 获取指定文件夹下面的子文件夹
        /// </summary>
        /// <param name="path">文件夹路径</param>
        /// <returns>返回子文件夹名组成的数组</returns>
        public static string[] filenodesfile(string path)
        {
            string[] dirs = Directory.GetDirectories(path);
            for (int i = 0; i < dirs.Length; i++)
            {
                dirs[i] = Path.GetFileName(dirs[i]);
            }
            return dirs;
        }
    }
}


